package jee.boot.common.basic.interceptor.impl;

import jee.boot.common.basic.DataEntity;
import jee.boot.common.basic.interceptor.PreQueryInterceptor;
import jee.boot.entity.auth.Account;
import jee.boot.entity.system.Filter;
import jee.boot.common.standard.AccountHandler;
import jee.boot.common.utils.SpringContextHolder;
import jee.boot.common.utils.StringUtils;

public class DefaultPreQueryInterceptor implements PreQueryInterceptor {
    /**
     * 执行前置操作
     *
     * @param entity
     */
    @Override
    public void execute(DataEntity<?> entity) {
        // 是否启用多租户管理
        if (entity.getProjectConfig().isEnableTenant()) {
            Account account = SpringContextHolder.getApplicationContext().getBean(AccountHandler.class).getPrincipal();
            // 当前登录人是否需要进行租户过滤
            if (account != null && StringUtils.isNotBlank(account.getTenant())) {
                // 当前数据是多租户数据模块
                if (entity.isTenantModule()) {
                    // 租户私有数据+全局数据(租户id为空)
                    entity.addFilter(new Filter(new Filter("tenant", "=", account.getTenant()), "or", new Filter("tenant", "is null", null)));
                }
            }
        }
    }
}
